import proto from '../proto/ProtoMsgV1_pb.js';

const ProtobufDecoder = {
	decode: function(buffer) {
		// 创建一个 DataView 以便读取 ArrayBuffer
		const dataView = new DataView(buffer);

		// 读取 2 字节的魔术数字,第二个参数 true 表示小端字节序
		const magicNumber = dataView.getInt16(0, false);

		// 读取 2 字节的版本号
		const version = dataView.getInt16(2, false);

		// 读取 4 字节的长度标记
		const lengthMarker = dataView.getUint32(4, false);

		// 检查长度标记是否有效，并读取实际数据
		if (lengthMarker > (buffer.byteLength - 8)) {
			throw new Error('Length marker exceeds remaining buffer size');
		}

		// 创建一个新的 Uint8Array 来包含实际数据
		const data = new Uint8Array(buffer, 8, lengthMarker);
		const pkg = proto.Message.deserializeBinary(data);
		return pkg;
	}
}


export default ProtobufDecoder;